#include<stdio.h>
const int maxn=100,n=21;
int p[maxn],s[maxn]={0},sum=0;
int g(int a,int b)
{
	if(b==0){
		if(a==1) return 1;
		else  return 0;
	}
	else return g(b,a%b);
}

int test(int i,int step)
{
	if(g(i,p[step-1])&&!s[i]){
		if(step==n-1){
			if(!g(i,p[0]))
				return 0;
		}
		return 1;
	}
	return 0;
}

void dfs(int step)
{
	if(step==n){
		sum++;
		return ;
	}
	for(int i=2;i<=n;i++){
		if(test(i,step)){
			s[i]=1;
			p[step]=i;
			dfs(step+1);
			s[i]=0;
		}
	}
}

int main()
{
	p[0]=1;
	dfs(1);
	printf("%d",sum);
	return 0;
} 
